//package com.shop.cloud.common.junit;
//
//import com.shop.cloud.common.core.util.SpringContextHolder;
//import com.shop.cloud.common.data.tenant.TenantContextHolder;
//import com.shop.cloud.common.junit.annotation.WithMockOAuth2User;
//import org.springframework.security.core.context.SecurityContext;
//import org.springframework.security.core.context.SecurityContextHolder;
//import org.springframework.security.oauth2.client.OAuth2ClientContext;
//import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken;
//import org.springframework.security.oauth2.provider.OAuth2Authentication;
//import org.springframework.security.oauth2.provider.token.ResourceServerTokenServices;
//import org.springframework.security.test.context.support.WithSecurityContextFactory;
//
///**
// * oauth2 上下文生成处理器
// */
//public class WithMockSecurityContextFactory implements WithSecurityContextFactory<WithMockOAuth2User> {
//
//	@Override
//	public SecurityContext createSecurityContext(WithMockOAuth2User oAuth2User) {
//		// 默认租户1
//		TenantContextHolder.setTenantId("1");
//
//		// 1. 请求认证中心获取token
//		String token = "e9cc73f3-40ff-4a5d-a568-6ee0b2659587";
//
//		// 2. 解析认证中心返回用户
//		OAuth2Authentication authentication = getUser(token);
//
//		// 3. 构建 oauth2 上下文
//		SecurityContext context = SecurityContextHolder.createEmptyContext();
//		context.setAuthentication(authentication);
//
//		// 4. 上下文保存 token
//		DefaultOAuth2AccessToken accessToken = new DefaultOAuth2AccessToken(token);
//		OAuth2ClientContext clientContext = SpringContextHolder.getBean(OAuth2ClientContext.class);
//		clientContext.setAccessToken(accessToken);
//		return context;
//	}
//
//
//	/**
//	 * 使用token 获取用户详情
//	 * @param token token
//	 * @return user详细
//	 */
//	private OAuth2Authentication getUser(final String token) {
//		ResourceServerTokenServices tokenServices = SpringContextHolder.getBean(ResourceServerTokenServices.class);
//		return tokenServices.loadAuthentication(token);
//	}
//
//}
